﻿/*
 * MemoryManager.h
 *
 *  Created on: 2011/11/28
 *      Author: naoki
 */

#ifndef INCLUDED_NTENGINE_BASE_MEMORYMANAGER_H
#define INCLUDED_NTENGINE_BASE_MEMORYMANAGER_H

namespace NTEngine {

/**
 * @brief newをつかさどるクラス
 */
class MemoryManager {
public:
	///インスタンス取得
	static MemoryManager instance();
	///情報の書き出し(ファイル名を与えればファイルへ、与えなければデバグ出力へ)
	void write( const char* filename = 0 );
	///全確保容量(内部予約容量を含む)
	int totalSize() const;
};

} //namespaace NTEngine

#include <new>
void* operator new( size_t size, const char* filename, int line );
void* operator new[]( size_t size, const char* filename, int line );
void operator delete( void*, const char*, int );
void operator delete[]( void*, const char*, int );
#ifdef ANDROID // GNUstlを使っていると例外の指定をしなくてはいけない・・・
void* operator new( size_t size ) throw ( std::bad_alloc );
void* operator new[]( size_t size ) throw ( std::bad_alloc );
void operator delete( void* ) throw ();
void operator delete[]( void* ) throw ();
#elif _WIN32
void* operator new( size_t size );
void* operator new[]( size_t size );
void operator delete( void* );
void operator delete[]( void* );
#endif

#endif // INCLUDED_NTENGINE_BASE_MEMORYMANAGER_H

